--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
meshchatx/src/backend/ringtone_manager.py e5080a7b3cba8d828f7bc2aa21e4acb3a17466a1 (e5080a7b) Text, 1.52 KB
T8b949e# SPDX-License-Identifier: 0BSD
Tff7b72import T7ee787os
Tff7b72from T7ee787.T7ee787audio_codec Tff7b72import Te6edf3encode_audio_to_ogg_opus
Tff7b72def Td2a8ff_ringtone_profileTb4b4b4(Tb4b4b4)Tb4b4b4:
T8b949e"""Stereo 48 kHz Opus ``audio`` profile for music-grade ringtones."""
Tff7b72from T7ee787LXSTT7ee787.T7ee787Codecs Tff7b72import Te6edf3Opus
Tff7b72return Te6edf3OpusTff7b72.Td2a8ffPROFILE_AUDIO_MAX
Tff7b72class T56d364RingtoneManagerTb4b4b4:
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3configTb4b4b4, Te6edf3storage_dirTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfig Tff7b72= Te6edf3config
Tff7b72selfTff7b72.Td2a8ffstorage_dir Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3storage_dirTb4b4b4, Ta5d6ff"Ta5d6ffringtonesTa5d6ff"Tb4b4b4)
Te6edf3osTff7b72.Td2a8ffmakedirsTb4b4b4(Tff7b72selfTff7b72.Td2a8ffstorage_dirTb4b4b4, Te6edf3exist_okTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72def Td2a8ffconvert_to_ringtoneTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3input_pathTb4b4b4, Te6edf3ringtone_idTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
T8b949e"""Decode ``input_path`` and re-encode it as an OGG/Opus ringtone.
Accepts any audio container miniaudio can decode (WAV, MP3, FLAC,
OGG/Vorbis) plus OGG/Opus via LXST. Encoded with the music
``audio`` profile so trim edits preserve the original duration
and stereo image instead of being forced through the low-bitrate
voice profile. Returns the stored filename.
"""
Tff7b72import T7ee787secrets
Te6edf3filename Tff7b72= Ta5d6fffTa5d6ff"Ta5d6ffringtone_Tffd700{Te6edf3secretsTff7b72.Td2a8fftoken_hexTb4b4b4(T79c0ff8Tb4b4b4)Tffd700}Ta5d6ff.opusTa5d6ff"
Te6edf3opus_path Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Tff7b72selfTff7b72.Td2a8ffstorage_dirTb4b4b4, Te6edf3filenameTb4b4b4)
Te6edf3encode_audio_to_ogg_opusTb4b4b4(Te6edf3input_pathTb4b4b4, Te6edf3opus_pathTb4b4b4, Te6edf3profileTff7b72=Te6edf3_ringtone_profileTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72return Te6edf3filename
Tff7b72def Td2a8ffremove_ringtoneTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3filenameTb4b4b4)Tb4b4b4:
Te6edf3opus_path Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Tff7b72selfTff7b72.Td2a8ffstorage_dirTb4b4b4, Te6edf3filenameTb4b4b4)
Tff7b72if Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffexistsTb4b4b4(Te6edf3opus_pathTb4b4b4)Tb4b4b4:
Te6edf3osTff7b72.Td2a8ffremoveTb4b4b4(Te6edf3opus_pathTb4b4b4)
Tff7b72return Tff7b72True
Tff7b72def Td2a8ffget_ringtone_pathTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3filenameTb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Tff7b72selfTff7b72.Td2a8ffstorage_dirTb4b4b4, Te6edf3filenameTb4b4b4)
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────